summaryrefslogtreecommitdiff
path: root/www/js/rdxport.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/js/rdxport.js')
-rw-r--r--www/js/rdxport.js472
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;
+};