/* * rhwebimport * * Copyright (C) 2014-2015 Christian Pointner * Copyright (C) 2015 Peter Grassberger * * 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 . */ var rivendell = null; var shows_currentid; var shows_list = []; var shows_current; var shows_group_carts = {}; var shows_log_carts = []; var shows_clock; function shows_deleteCart(cart) { rivendell.removeCart(cart, function() { shows_updateGroupCartInfo(cart); }); } function shows_importAddCut(cart, dz, file) { rivendell.addCut(cart, function() { dz.processQueue(); }).fail(function(xhr, status, err) { shows_importFileUploadError(cart, dz, file, err, xhr); }); } function shows_importAddCart(cart, dz, file) { rivendell.addCart(shows_current.group.name, 'audio', cart, function() { shows_importAddCut(cart, dz, file); }).fail(function(xhr, status, err) { shows_importFileUploadError(cart, dz, file, err, xhr); }); } function shows_importCartCancel(cart, dz) { shows_deleteCart(cart); dz.off("error"); dz.disable(); } function shows_importFileUploadError(cart, dz, file, msg, xhr) { var error_row = shows_newImportErrorEntry(cart, msg); error_row.find('button').unbind('click').click(function() { shows_deleteCart(cart); }); $('#show-cart-' + cart).replaceWith(error_row); error_row.find('.file-name').text(file.name); dz.disable(); } function shows_importFileUploadSuccess(cart, dz, file) { shows_updateGroupCartInfo(cart); dz.disable(); } function shows_importUpdateProgress(file, stats) { if(file.upload.progress < 99) { var bytes_str = Number((file.upload.bytesSent/1024)/1024).toFixed(1) + " von " + Number((file.upload.total/1024)/1024).toFixed(1) + " MB"; stats.find('.file-bytes').text(bytes_str); stats.find('.progress .bar').css("width", file.upload.progress + "%"); } else { stats.find('.file-bytes').text('importiere...'); stats.find('.progress .bar').css('width', '100%'); stats.find('.progress').addClass('progress-striped').addClass('active'); } } function shows_importCartConfirm(cart, dz) { $('#uploadModal').modal('hide'); var cart_row = $('#show-cart-' + cart); cart_row.find('.btn').attr('disabled','disabled'); var importing_row = shows_newImportingEntry(cart); importing_row.find('button').unbind('click').click(function() { shows_importCartCancel(cart, dz); }); cart_row.replaceWith(importing_row); dz.off("error"); files = dz.getAcceptedFiles(); importing_row.find('.file-name').text(files[0].name); shows_importUpdateProgress(files[0], importing_row); dz.on("uploadprogress", function(file) { shows_importUpdateProgress(file, importing_row); }); dz.on("success", function(file) { shows_importFileUploadSuccess(cart, dz, file); }); dz.on("error", function(file, msg, xhr) { shows_importFileUploadError(cart, this, file, msg, xhr); }); shows_importAddCart(cart, dz, files[0]); } function shows_createImportForm(cart) { return $('
').attr("action", "/rd-bin/rdxport.cgi").attr("method", "post").attr("enctype", "multipart/form-data") .append($('').attr("type", "hidden").attr("name", "COMMAND").attr("value", 2)) .append($('').attr("type", "hidden").attr("name", "LOGIN_NAME").attr("value", auth_username)) .append($('').attr("type", "hidden").attr("name", "PASSWORD").attr("value", auth_token)) .append($('').attr("type", "hidden").attr("name", "CART_NUMBER").attr("value", cart)) .append($('').attr("type", "hidden").attr("name", "CUT_NUMBER").attr("value", 1)) .append($('').attr("type", "hidden").attr("name", "CHANNELS").attr("value", 2)) .append($('').attr("type", "hidden").attr("name", "NORMALIZATION_LEVEL").attr("value", shows_current.normlevel)) .append($('').attr("type", "hidden").attr("name", "AUTOTRIM_LEVEL").attr("value", shows_current.trimlevel)) .append($('').attr("type", "hidden").attr("name", "USE_METADATA").attr("value", 1)); } function shows_importFileAdded(dz, file, cart) { $(dz.getAcceptedFiles()).each(function(idx, elem) { dz.removeFile(elem); }); $('#uploadModal div.modal-body').css("background-image", "url('/img/audio_file.png')") $('#uploadModal div.modal-header h3').text(file.name) $('#uploadModal-confirm').removeAttr('disabled').unbind('click').click(function() { shows_importCartConfirm(cart, dz); }); } function shows_importFileSelectError(dz, file, msg) { $('#uploadModal div.modal-header h3').text("Datei auswählen...") $('#uploadModal div.modal-body').css("background-image", "url('/img/dz-backdrop.png')"); $('#uploadModal-confirm').attr('disabled','disabled').unbind('click'); dz.removeFile(file); } function shows_importCart(cart) { var form = shows_createImportForm(cart); $('#uploadModal div.modal-header h3').text("Datei auswählen...") $('#uploadModal div.modal-body').empty().append(form).css("background-image", "url('/img/dz-backdrop.png')"); $('#uploadModal-confirm').attr('disabled','disabled').unbind('click'); var dz = form.dropzone({ url: "/rd-bin/rdxport.cgi", parallelUploads: 1, maxFilesize: 2048, paramName: 'FILENAME', uploadMultiple: false, clickable: true, createImageThumbnails: false, acceptedFiles: ".flac,.wav,.ogg,.mp3", autoProcessQueue: false, init: function() { this.on("addedfile", function(file) { shows_importFileAdded(this, file, cart); }); this.on("error", function(file, msg) { shows_importFileSelectError(this, file, msg); }); }}); $('#uploadModal').modal({ keyboard: true }); } // // // // // // // // // // function shows_newCartEntry(elem) { var cart_exists = shows_group_carts[elem] ? 1 : 0; var cart = {}; cart.title = cart_exists ? shows_group_carts[elem].title : '-'; cart.length = cart_exists ? shows_group_carts[elem].length : '-'; cart.imported = cart_exists ? format_datetime(shows_group_carts[elem].imported) : '-'; cart.playcnt = cart_exists ? shows_group_carts[elem].playcnt : '-'; cart.lastplayed = cart_exists ? format_datetime(shows_group_carts[elem].lastplayed) : '-'; var buttons = cart_exists ? '' : ''; return $('').append($('').text(elem)) .append($('').text(cart.title)) .append($('').text(msToTimeString(cart.length))) .append($('').text(cart.imported)) .append($('').text(cart.playcnt)) .append($('').text(cart.lastplayed)) .append($('').css('text-align', 'center').append(buttons)) .attr("id", "show-cart-" + elem); } function shows_newImportingEntry(cart) { var progress_bar = '
'; var cancel_button = ''; return $('').append($('').text(cart)) .append($('').addClass('file-name').text('-')) .append($('').addClass('file-bytes').text('??.? von ??.? MB')) .append($('').append(progress_bar)) .append($('').css('text-align', 'center').append(cancel_button)) .attr("id", "show-cart-" + cart); } function shows_newImportErrorEntry(cart, msg) { var dismiss_button = ''; var xmlDoc = $.parseXML(msg); msg = $(xmlDoc); var resp_code = msg.find('ResponseCode').text(); var err_string = msg.find('ErrorString').text(); var reason = $('').addClass('badge').addClass('badge-error').text(resp_code).after($('').html(' ' + err_string)) return $('').append($('').text(cart)) .append($('').addClass('file-name').text('-')) .append($('').append($('').text('Import Fehler'))) .append($('').append(reason)) .append($('').css('text-align', 'center').append(dismiss_button)) .attr("id", "show-cart-" + cart); } function shows_updateGroupCartInfo(cart) { rivendell.listCart(cart, 1, function(data) { shows_updateGroupCartList(data); shows_redrawCartEntry(cart); }).fail(function() { delete shows_group_carts[cart]; shows_redrawCartEntry(cart); }); } function shows_redrawCartEntry(cart) { $('#show-cart-' + cart).replaceWith(shows_newCartEntry(cart)); } function shows_updateCartListing() { $('#show-carts tbody').find('tr').remove(); shows_log_carts.forEach(function(elem) { $('#show-carts > tbody:last').append(shows_newCartEntry(elem)); }); } function shows_updateGroupCartList(data) { var cartlist = $(data).find("cartList"); var carts = cartlist.children(); carts.each(function() { var cut = $(this).find("cutList").get(0); var number = $(this).find('number').text(); var cart = { title: $(this).find('title').text(), length: Number($(cut).find('length').text()), imported: new Date($(cut).find('originDatetime').text()), playcnt: $(cut).find('playCounter').text(), lastplayed: new Date($(cut).find('lastPlayDatetime').text()) }; cart.imported = isNaN(cart.imported) ? '-' : cart.imported; cart.lastplayed = isNaN(cart.lastplayed) ? '-' : cart.lastplayed; shows_group_carts[number] = cart; } ); } function shows_updateLogCartList(data, status, req) { var loglist = $(data).find("logList"); var loglines = loglist.children(); loglines.each(function() { var number = $(this).find('cartNumber').text(); if(number >= shows_current.group.lowcart && number <= shows_current.group.highcart) { shows_log_carts.push(number); } } ); } function shows_showSelected() { shows_currentid = $('#show-selector option:selected').attr('value'); sessionStorage.setItem("shows_currentid", shows_currentid); shows_current = $.grep(shows_list, function(elem) { return elem.id == shows_currentid; })[0]; if(shows_current) { $('#show-title').text(shows_current.title); $('#show-dow').text(weekday[shows_current.dow]); $('#show-rhythm').text(shows_current.rhythm); $('#show-starttime').text(shows_current.starttime); $('#show-length').text(shows_current.length + ' Min.'); shows_log_carts = []; var lcd = rivendell.listLog(shows_current.log, shows_updateLogCartList); shows_group_carts = {}; var gcd = rivendell.listCarts(shows_current.group.name, 1, shows_updateGroupCartList); $.when(lcd, gcd).done( function(lcres, gcres) { if(lcres[1] == 'success' && gcres[1] == 'success') { shows_updateCartListing(); } } ); } } function shows_updateList(data, status, req) { shows_list = []; $('#show-selector').find('option').remove(); var dblist = $(data).find("dropboxList"); var dbs = dblist.children(); dbs.each(function() { var type = $(this).find('type').text(); if(type == 'show') { var show = { id: $(this).find('show-id').text(), title: $(this).find('show-title').text(), dow: $(this).find('show-dayofweek').text(), rhythm: $(this).find('show-rhythm').text(), starttime: $(this).find('show-starttime').text(), length: $(this).find('show-length').text(), log: $(this).find('show-log').text(), group: { name: $(this).find('group').text(), lowcart: $(this).find('group-low-cart').text(), highcart: $(this).find('group-high-cart').text() }, normlevel: $(this).find('normalization-level').text(), trimlevel: $(this).find('autotrim-level').text() }; var name = show.title + ' (' + show.rhythm + ', ' + weekday[show.dow] + ', ' + show.starttime + ', ' + show.length + ' Min.)'; $('#show-selector').append($('