diff options
author | Peter Grassberger <petertheone@gmail.com> | 2016-02-05 00:07:47 (GMT) |
---|---|---|
committer | Peter Grassberger <petertheone@gmail.com> | 2016-02-05 00:07:47 (GMT) |
commit | ca488f8d3609500b89b95c6c2ff6c533e62a7aea (patch) | |
tree | 746431dd97ede28079c87a3951153a0c5fb114e1 /www/js/rdxport.js | |
parent | ee29206687484d49df4c77bd4d634080f1c7dca4 (diff) |
rename rivendell.js to rdxport.js
Diffstat (limited to 'www/js/rdxport.js')
-rw-r--r-- | www/js/rdxport.js | 472 |
1 files changed, 472 insertions, 0 deletions
diff --git a/www/js/rdxport.js b/www/js/rdxport.js new file mode 100644 index 0000000..633b89e --- /dev/null +++ b/www/js/rdxport.js @@ -0,0 +1,472 @@ +/* + * rhwebimport + * + * Copyright (C) 2014-2016 Christian Pointner <equinox@helsinki.at> + * Copyright (C) 2015-2016 Peter Grassberger <petertheone@gmail.com> + * + * This file is part of rhwebimport. + * + * rhwebimport is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * rhwebimport is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with rhwebimport. If not, see <http://www.gnu.org/licenses/>. + */ + +'use strict'; + +var Rivendell = Rivendell || {}; + +Rivendell.Rdxport = function(username, token, endpoint) { + this.username = username; + this.token = token; + this.endpoint = endpoint; +}; + +Rivendell.Rdxport.prototype.listLog = function(name, success) { + var command = { + COMMAND: 22, + LOGIN_NAME: this.username, + PASSWORD: this.token, + NAME: name + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.listLogs = function(success) { + var command = { + COMMAND: 20, + LOGIN_NAME: this.username, + PASSWORD: this.token + //todo: fix optionals + /*SERVICE_NAME: serviceName, + TRACKABLE: trackable*/ + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.listServices = function(success) { + var command = { + COMMAND: 21, + LOGIN_NAME: this.username, + PASSWORD: this.token + //todo: fix optionals + /*TRACKABLE: trackable*/ + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.listGroups = function(success) { + var command = { + COMMAND: 4, + LOGIN_NAME: this.username, + PASSWORD: this.token + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.listGroup = function(groupName, success) { + var command = { + COMMAND: 5, + LOGIN_NAME: this.username, + PASSWORD: this.token, + GROUP_NAME: groupName + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.listCarts = function(groupName, includeCuts, success) { + var command = { + COMMAND: 6, + LOGIN_NAME: this.username, + PASSWORD: this.token, + GROUP_NAME: groupName, + INCLUDE_CUTS: includeCuts + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.listCart = function(cartNumber, includeCuts, success) { + var command = { + COMMAND: 7, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber, + INCLUDE_CUTS: includeCuts + }; + return $.post(this.endpoint, command, success); +}; + +Rivendell.Rdxport.prototype.addCart = function(groupName, type, cartNumber, success) { + var command = { + COMMAND: 12, + LOGIN_NAME: this.username, + PASSWORD: this.token, + GROUP_NAME: groupName, + TYPE: type + }; + if (cartNumber !== null) { + command.CART_NUMBER = cartNumber; + } + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.editCart = function(cartNumber, options, success) { + options.COMMAND = 14; + options.LOGIN_NAME = this.username; + options.PASSWORD = this.token; + options.CART_NUMBER = cartNumber; + return $.post(this.endpoint, options, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.removeCart = function(cartNumber, success) { + var command = { + COMMAND: 13, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.listCuts = function(cartNumber, success) { + var command = { + COMMAND: 9, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.listCut = function(cartNumber, cutNumber, success) { + var command = { + COMMAND: 8, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber, + CUT_NUMBER: cutNumber + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.addCut = function(cartNumber, success) { + var command = { + COMMAND: 10, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.editCut = function(cartNumber, cutNumber, options, success) { + options.COMMAND = 15; + options.LOGIN_NAME = this.username; + options.PASSWORD = this.token; + options.CART_NUMBER = cartNumber; + options.CUT_NUMBER = cutNumber; + return $.post(this.endpoint, options, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.addAndEditCut = function(cartNumber, options, success) { + var self = this; + var returnJqXHR = null; + return this.addCut(cartNumber, success) + .success(function(data, textStatus, jqXHR) { + var cutNumber = $('cutAdd cut cutNumber', data).text(); + returnJqXHR = self.editCut(cartNumber, cutNumber, options, null); + }); +}; + +Rivendell.Rdxport.prototype.removeCut = function(cartNumber, cutNumber, success) { + var command = { + COMMAND: 11, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber, + CUT_NUMBER: cutNumber + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +/** + * + * todo: copy description and other data. + * + * @param sourceCartNumber + * @param sourceCutNumber + * @param destinationCartNumber + * @param success + * @returns {*} + */ +Rivendell.Rdxport.prototype.copyCut = function(sourceCartNumber, sourceCutNumber, + destinationCartNumber, success) { + var self = this; + var returnJqXHR = null; + this.listCut(sourceCartNumber, sourceCutNumber, function(data, textStatus, jqXHR) { + var options = { + DESCRIPTION: $('cutList cut description', data).text() + // todo: add more options + }; + self.addAndEditCut(destinationCartNumber, options, function(data, textStatus, jqXHR) { + var destinationCutNumber = $('cutAdd cut cutNumber', data).text(); + returnJqXHR = self.copyAudio(sourceCartNumber,sourceCutNumber, destinationCartNumber, destinationCutNumber, success) + .fail(function() { + self.removeCut(destinationCartNumber, destinationCutNumber, null); + }); + }); + }); + return returnJqXHR; +}; + +/** + * + * @param sourceCartNumber + * @param sourceCutNumber + * @param destinationCartNumber + * @param success + */ +Rivendell.Rdxport.prototype.moveCut = function(sourceCartNumber, sourceCutNumber, + destinationCartNumber, success) { + var self = this; + var returnJqXHR = null; + this.copyCut(sourceCartNumber, sourceCutNumber, destinationCartNumber, function(data, textStatus, jqXHR) { + returnJqXHR = self.removeCut(sourceCartNumber, sourceCutNumber, success); + }); + return returnJqXHR; +}; + +Rivendell.Rdxport.prototype.copyAudio = function(sourceCartNumber, sourceCutNumber, + destinationCartNumber, destinationCutNumber, success) { + var command = { + COMMAND: 18, + LOGIN_NAME: this.username, + PASSWORD: this.token, + SOURCE_CART_NUMBER: sourceCartNumber, + SOURCE_CUT_NUMBER: sourceCutNumber, + DESTINATION_CART_NUMBER: destinationCartNumber, + DESTINATION_CUT_NUMBER: destinationCutNumber + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.audioInfo = function(cartNumber, cutNumber, success) { + var command = { + COMMAND: 19, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber, + CUT_NUMBER: cutNumber + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.audioStore = function(success) { + var command = { + COMMAND: 23, + LOGIN_NAME: this.username, + PASSWORD: this.token + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.import = function(cartNumber, cutNumber, channels, normalizationLevel, autotrimLevel, + useMetadata, filename, success) { + var command = { + COMMAND: 2, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber, + CUT_NUMBER: cutNumber, + CHANNELS: channels, + NORMALIZATION_LEVEL: normalizationLevel, + AUTOTRIM_LEVEL: autotrimLevel, + USE_METADATA: useMetadata, + FILENAME: filename + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.export = function(cartNumber, cutNumber, format, channels, sampleRate, bitRate, + quality, startPoint, endPoint, normalizationLevel, enableMetadata, + success) { + var command = { + COMMAND: 1, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber, + CUT_NUMBER: cutNumber, + FORMAT: format, + CHANNELS: channels, + SAMPLE_RATE: sampleRate, + BIT_RATE: bitRate, + QUALITY: quality, + START_POINT: startPoint, + END_POINT: endPoint, + NORMALIZATION_LEVEL: normalizationLevel, + ENABLE_METADATA: enableMetadata + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.exportPeaks = function(cartNumber, cutNumber, success) { + var command = { + COMMAND: 16, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber, + CUT_NUMBER: cutNumber + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.trimAudio = function(cartNumber, cutNumber, trimLevel, success) { + var command = { + COMMAND: 17, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber, + CUT_NUMBER: cutNumber, + TRIM_LEVEL: trimLevel + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.Rdxport.prototype.deleteAudio = function(cartNumber, cutNumber, success) { + var command = { + COMMAND: 3, + LOGIN_NAME: this.username, + PASSWORD: this.token, + CART_NUMBER: cartNumber, + CUT_NUMBER: cutNumber + }; + return $.post(this.endpoint, command, success, 'xml'); +}; + +Rivendell.GroupList = function(rivendell) { + this.rivendell = rivendell; + + this.groups = []; +}; + +Rivendell.Group = function(groupName, description, lowcart, highcart, normlevel, trimlevel) { + this.xml = null; + + if (arguments.length === 1) { + this.xml = arguments[0]; + this.groupName = $('group', this.xml).text(); + this.description = $('group-description', this.xml).text(); + this.lowcart = $('group-low-cart', this.xml).text(); + this.highcart = $('group-high-cart', this.xml).text(); + this.normlevel = $('normalization-level', this.xml).text(); + this.trimlevel = $('autotrim-level', this.xml).text(); + } else { + this.groupName = groupName; + this.description = description; + this.lowcart = lowcart; + this.highcart = highcart; + this.normlevel = normlevel; + this.trimlevel = trimlevel; + } + + this.carts = []; +}; + +Rivendell.Group.prototype.addCart = function(cart) { + this.carts.push(cart); +}; + +Rivendell.Group.prototype.removeCart = function(cart) { + var self = this; + $.each(this.carts, function(index, currentCart){ + if(currentCart === cart) { + self.carts.splice(index, 1); + } + }); +}; + +Rivendell.Group.prototype.fetchCarts = function() { + var self = this; + rivendell.listCarts(this.groupName, 1, function(cartsXml, status, req) { + self.carts = []; + + var dbs = $('cartList', cartsXml).children(); + dbs.each(function(index, cartXml) { + var cart = new Rivendell.Cart(cartXml, self); + + var cuts = $('cutList', cartXml).children(); + cuts.each(function(index, cut) { + cart.cuts.push(new Rivendell.Cut(cut, cart)); + }); + + self.carts.push(cart); + }); + $(self).trigger('update'); + }); +}; + +Rivendell.Cart = function(number, title, groupName, group) { + this.xml = null; + + if (arguments.length === 2) { + this.xml = arguments[0]; + this.number = $('number', this.xml).text(); + this.title = $('title', this.xml).text(); + this.groupName = $('groupName', this.xml).text(); + this.group = arguments[1]; + } else { + this.number = number; + this.title = title; + this.groupName = groupName; + this.group = group; + } + + this.cuts = []; +}; + +Rivendell.Cart.prototype.addCut = function(cut) { + this.cuts.push(cut); +}; + +Rivendell.Cart.prototype.removeCut = function(cut) { + var self = this; + $.each(this.cuts, function(index, currentCut){ + if(currentCut === cut) { + self.cuts.splice(index, 1); + } + }); +}; + +Rivendell.Cut = function(name, description, cart, length, originDatetime, + playCounter, lastPlayDatetime) { + this.xml = null; + + if (arguments.length === 2) { + this.xml = arguments[0]; + this.name = $('cutName', this.xml).text(); + this.description = $('description', this.xml).text(); + this.length = $('length', this.xml).text(); + this.originDatetime = $('originDatetime', this.xml).text(); + this.playCounter = $('playCounter', this.xml).text(); + this.lastPlayDatetime = $('lastPlayDatetime', this.xml).text(); + this.cart = arguments[1]; + } else { + this.name = name; + this.description = description; + this.cart = cart; + this.length = length; + this.originDatetime = originDatetime; + this.playCounter = playCounter; + this.lastPlayDatetime = lastPlayDatetime; + } + this.number = this.name.substr(-3); + this.cartNumber = this.cart.number; +}; |