sintonia/airtime_mvc/public/js/airtime/library/publish.js

166 lines
5.9 KiB
JavaScript

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 ($scope, $http, mediaId, tab) {
$scope.publishData = {};
var sourceInterval;
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) {
if (k == "soundcloud") {
alert($.i18n._("Your track is being uploaded and will "
+ "appear on SoundCloud in a couple of minutes"));
}
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 () {
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
if (source != "soundcloud" || confirm($.i18n._("Are you sure? SoundCloud stats and comments "
+ "for this track will be permanently removed."))) {
$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 || {}));