var AIRTIME = (function (AIRTIME) { var mod; if (AIRTIME.publish === undefined) { AIRTIME.publish = {}; } mod = AIRTIME.publish; var endpoint = "rest/media/"; var dialogUrl = "library/publish-dialog"; var PUBLISH_APP_NAME = "publish"; //AngularJS app var publishApp = angular .module(PUBLISH_APP_NAME, []) .controller("Publish", function ($sce, $scope, $http, mediaId, tab) { $scope.publishData = {}; var sourceInterval; tab.contents.on("click", "input[type='checkbox']", function () { var noSourcesChecked = true; $.each(tab.contents.find("input[type='checkbox']"), function () { if ($(this).is(":checked")) { noSourcesChecked = false; } }); tab.contents.find(".publish-btn").prop("disabled", noSourcesChecked); }); function fetchSourceData() { var csrfToken = jQuery("#csrf").val(); $http .get(endpoint + mediaId, { csrf_token: csrfToken }) .success(function (json) { $scope.media = json; tab.setName($scope.media.track_title); }); // Get an object containing all sources, their translated labels, // and their publication state for the file with the given ID $http .get(endpoint + mediaId + "/publish-sources", { csrf_token: csrfToken, }) .success(function (json) { $scope.sources = { toPublish: [], published: [] }; $.each(json, function () { if (Math.abs(this.status) == 1) { $scope.sources.published.push(this); } else { $scope.sources.toPublish.push(this); } }); }); } function init() { fetchSourceData(); sourceInterval = setInterval(function () { fetchSourceData(); }, 5000); tab.assignOnCloseHandler(function () { clearInterval(sourceInterval); $scope.$destroy(); }); } $scope.openEditDialog = function () { var uid = AIRTIME.library.MediaTypeStringEnum.FILE + "_" + mediaId; $.get( baseUrl + "library/edit-file-md/id/" + mediaId, { format: "json" }, function (json) { AIRTIME.playlist.fileMdEdit(json, uid); }, ); }; $scope.publish = function () { var data = {}; jQuery.each($scope.publishData, function (k, v) { if (v) { data[k] = "publish"; // FIXME: should be more robust } }); if (data && Object.keys(data).length > 0) { $http .put(endpoint + mediaId + "/publish", { csrf_token: jQuery("#csrf").val(), sources: data, }) .success(function () { tab.contents.find(".publish-btn").prop("disabled", true); fetchSourceData(); $scope.publishData = {}; // Reset the publishData in case the user publishes // and unpublishes without closing the tab }); } }; $scope.remove = function (source) { var data = {}; data[source] = "unpublish"; // FIXME: should be more robust $http .put(endpoint + mediaId + "/publish", { csrf_token: jQuery("#csrf").val(), sources: data, }) .success(function () { fetchSourceData(); }); }; $scope.discard = function () { tab.close(); $scope.media = {}; }; init(); }); /* var selected = $("#podcast_table").find(".selected"), ids = []; var selectedData = AIRTIME.library.podcastTableWidget.getSelectedRows(); selectedData.forEach(function(el) { ids.push(el.id); });*/ function _bootstrapAngularApp(mediaId, tab) { publishApp.value("mediaId", mediaId); publishApp.value("tab", tab); var wrapper = AIRTIME.tabs.getActiveTab().contents.find(".angular_wrapper"); angular.bootstrap(wrapper.get(0), [PUBLISH_APP_NAME]); } mod.publishSelectedTracks = function () { /* _bulkAction("GET", function(json) { json.forEach(function(el) { var uid = AIRTIME.library.MediaTypeStringEnum.FILE+"_"+el.id; var mediaId = el.id; $http.get(dialogUrl, { csrf_token: jQuery("#csrf").val() }) .success(function(json) { AIRTIME.tabs.openTab(json, uid, null); _bootstrapAngularApp(mediaId); }); }); });*/ }; mod.openPublishDialog = function (mediaId) { jQuery .get(dialogUrl, { csrf_token: jQuery("#csrf").val() }) .success(function (html) { var tab = AIRTIME.tabs.openTab( html, PUBLISH_APP_NAME + "_" + mediaId, null, ); _bootstrapAngularApp(mediaId, tab); }); /* _bulkAction("GET", function(json) { json.forEach(function(el) { var uid = AIRTIME.library.MediaTypeStringEnum.FILE+"_"+el.id; $http.get(dialogUrl, { csrf_token: jQuery("#csrf").val() }) .success(function(json) { AIRTIME.tabs.openTab(json, uid, null); _bootstrapAngularApp(el.media); }); }); });*/ }; return AIRTIME; })(AIRTIME || {});