238 lines
7.5 KiB
JavaScript
238 lines
7.5 KiB
JavaScript
$(document).ready(function () {
|
|
var uploadProgress;
|
|
var self = this;
|
|
self.uploadFilter = "all";
|
|
|
|
self.IMPORT_STATUS_CODES = {
|
|
0: { message: $.i18n._("Successfully imported") },
|
|
1: { message: $.i18n._("Pending import") },
|
|
2: { message: $.i18n._("Import failed.") },
|
|
UNKNOWN: { message: $.i18n._("Unknown") },
|
|
};
|
|
if (Object.freeze) {
|
|
Object.freeze(self.IMPORT_STATUS_CODES);
|
|
}
|
|
|
|
Dropzone.options.addMediaDropzone = {
|
|
url: "/rest/media",
|
|
//clickable: false,
|
|
acceptedFiles: acceptedMimeTypes.join(),
|
|
addRemoveLinks: true,
|
|
dictRemoveFile: $.i18n._("Remove"),
|
|
maxFilesize: LIBRETIME_PLUPLOAD_MAX_FILE_SIZE, //Megabytes
|
|
init: function () {
|
|
this.on("sending", function (file, xhr, data) {
|
|
data.append("csrf_token", $("#csrf").val());
|
|
});
|
|
|
|
this.on("addedfile", function (file, xhr, data) {
|
|
var el = $(file.previewElement);
|
|
uploadProgress = true;
|
|
el.find(".dz-remove").prependTo(el.find(".dz-details"));
|
|
el.find(".dz-error-message").appendTo(el.find(".dz-error-mark"));
|
|
});
|
|
|
|
this.on("success", function (file, xhr, data) {
|
|
//Refresh the upload table:
|
|
self.recentUploadsTable.fnDraw(); //Only works because we're using bServerSide
|
|
//In DataTables 1.10 and greater, we can use .fnAjaxReload()
|
|
});
|
|
|
|
this.on("queuecomplete", function () {
|
|
uploadProgress = false;
|
|
});
|
|
},
|
|
};
|
|
|
|
$(window).bind("beforeunload", function () {
|
|
if (uploadProgress) {
|
|
return sprintf(
|
|
$.i18n._(
|
|
"You are currently uploading files. %sGoing to another screen will cancel the upload process. %sAre you sure you want to leave the page?",
|
|
),
|
|
"\n",
|
|
"\n",
|
|
);
|
|
}
|
|
});
|
|
|
|
self.renderImportStatus = function (data, type, full) {
|
|
if (typeof data !== "number") {
|
|
console.log("Invalid data type for the import_status.");
|
|
return;
|
|
}
|
|
var statusStr = self.IMPORT_STATUS_CODES.UNKNOWN.message;
|
|
var importStatusCode = data;
|
|
if (self.IMPORT_STATUS_CODES[importStatusCode]) {
|
|
statusStr = self.IMPORT_STATUS_CODES[importStatusCode].message;
|
|
}
|
|
|
|
return statusStr;
|
|
};
|
|
|
|
self.renderFileActions = function (data, type, full) {
|
|
if (full.import_status == 0) {
|
|
return (
|
|
'<a class="deleteFileAction">' +
|
|
$.i18n._("Delete from Library") +
|
|
"</a>"
|
|
);
|
|
} else if (full.import_status == 1) {
|
|
//No actions for pending files
|
|
return $.i18n._("N/A");
|
|
} else {
|
|
//Failed downloads
|
|
return '<a class="deleteFileAction">' + $.i18n._("Clear") + "</a>";
|
|
}
|
|
};
|
|
|
|
$("#recent_uploads_table").on("click", "a.deleteFileAction", function () {
|
|
//Grab the file object for the row that was clicked.
|
|
// Some tips from the DataTables forums:
|
|
// fnGetData is used to get the object behind the row - you can also use
|
|
// fnGetPosition if you need to get the index instead
|
|
file = $("#recent_uploads_table")
|
|
.dataTable()
|
|
.fnGetData($(this).closest("tr")[0]);
|
|
|
|
$.ajax({
|
|
type: "DELETE",
|
|
url: "rest/media/" + file.id + "?csrf_token=" + $("#csrf").attr("value"),
|
|
success: function (resp) {
|
|
self.recentUploadsTable.fnDraw();
|
|
},
|
|
error: function () {
|
|
alert(
|
|
$.i18n._(
|
|
"Error: The file could not be deleted. Please try again later.",
|
|
),
|
|
);
|
|
},
|
|
});
|
|
});
|
|
|
|
self.setupRecentUploadsTable = function () {
|
|
return $("#recent_uploads_table").dataTable({
|
|
bJQueryUI: true,
|
|
bProcessing: false,
|
|
bServerSide: true,
|
|
sAjaxSource: "/plupload/recent-uploads/format/json",
|
|
sAjaxDataProp: "files",
|
|
bSearchable: false,
|
|
bInfo: true,
|
|
//"sScrollY": "200px",
|
|
bFilter: false,
|
|
bSort: false,
|
|
//"sDom": '<"H">frtip<"F"l>',
|
|
sDom: '<"dataTables_scrolling"frt><"F"lip>',
|
|
bPaginate: true,
|
|
sPaginationType: "full_numbers",
|
|
oLanguage: getDatatablesStrings({
|
|
sEmptyTable: $.i18n._("No files have been uploaded yet."),
|
|
sInfoEmpty: $.i18n._("Showing 0 to 0 of 0 uploads"),
|
|
sInfo: $.i18n._("Showing _START_ to _END_ of _TOTAL_ uploads"),
|
|
sInfoFiltered: $.i18n._("(filtered from _MAX_ total uploads)"),
|
|
}),
|
|
aoColumns: [
|
|
{ mData: "artist_name", sTitle: $.i18n._("Creator") },
|
|
{ mData: "track_title", sTitle: $.i18n._("Title") },
|
|
{
|
|
mData: "import_status",
|
|
sTitle: $.i18n._("Import Status"),
|
|
mRender: self.renderImportStatus,
|
|
},
|
|
{ mData: "utime", sTitle: $.i18n._("Uploaded") },
|
|
{
|
|
mData: "id",
|
|
sTitle: $.i18n._("Actions"),
|
|
mRender: self.renderFileActions,
|
|
},
|
|
],
|
|
fnServerData: function (sSource, aoData, fnCallback) {
|
|
/* Add some extra data to the sender */
|
|
aoData.push({ name: "uploadFilter", value: self.uploadFilter });
|
|
$.getJSON(sSource, aoData, function (json) {
|
|
fnCallback(json);
|
|
if (json.files) {
|
|
var areAnyFileImportsPending = false;
|
|
for (var i = 0; i < json.files.length; i++) {
|
|
//console.log(file);
|
|
var file = json.files[i];
|
|
if (file.import_status == 1) {
|
|
areAnyFileImportsPending = true;
|
|
}
|
|
}
|
|
|
|
if (areAnyFileImportsPending) {
|
|
//alert("pending uploads, starting refresh on timer");
|
|
self.startRefreshingRecentUploads();
|
|
} else if (self.isRecentUploadsRefreshTimerActive) {
|
|
self.stopRefreshingRecentUploads();
|
|
self.recentUploadsTable.fnDraw();
|
|
}
|
|
|
|
// Update usability hint - in common.js
|
|
getUsabilityHint();
|
|
}
|
|
});
|
|
},
|
|
});
|
|
};
|
|
|
|
$("#recent_uploads").addTitles("td");
|
|
|
|
self.isRecentUploadsRefreshTimerActive = false;
|
|
|
|
self.startRefreshingRecentUploads = function () {
|
|
if (!self.isRecentUploadsRefreshTimerActive) {
|
|
//Prevent multiple timers from running
|
|
self.recentUploadsRefreshTimer = setInterval(function () {
|
|
self.recentUploadsTable.fnDraw();
|
|
}, 3000);
|
|
self.isRecentUploadsRefreshTimerActive = true;
|
|
}
|
|
};
|
|
|
|
self.stopRefreshingRecentUploads = function () {
|
|
clearInterval(self.recentUploadsRefreshTimer);
|
|
self.isRecentUploadsRefreshTimerActive = false;
|
|
};
|
|
|
|
$("#upload_status_all").click(function () {
|
|
if (self.uploadFilter !== "all") {
|
|
self.uploadFilter = "all";
|
|
self.recentUploadsTable.fnPageChange(0).fnDraw();
|
|
}
|
|
});
|
|
$("#upload_status_pending").click(function () {
|
|
if (self.uploadFilter !== "pending") {
|
|
self.uploadFilter = "pending";
|
|
self.recentUploadsTable.fnPageChange(0).fnDraw();
|
|
}
|
|
});
|
|
$("#upload_status_failed").click(function () {
|
|
if (self.uploadFilter !== "failed") {
|
|
self.uploadFilter = "failed";
|
|
self.recentUploadsTable.fnPageChange(0).fnDraw();
|
|
}
|
|
});
|
|
|
|
//Create the recent uploads table.
|
|
self.recentUploadsTable = self.setupRecentUploadsTable();
|
|
|
|
//$("#recent_uploads_table.div.fg-toolbar").prepend('<b>Custom tool bar! Text/images etc.</b>');
|
|
|
|
$("#select_type").on("change", function () {
|
|
var ttValue = $("#select_type").val();
|
|
var ttText = $('#select_type option[value="' + ttValue + '"]').text();
|
|
if (ttValue != "") {
|
|
$("#upload_type").text(" " + ttText);
|
|
$("#upload_type").css("color", "#ff611f");
|
|
} else {
|
|
$("#upload_type").text(" Tracks");
|
|
$("#upload_type").css("color", "#ffffff");
|
|
}
|
|
Cookies.set("tt_upload", ttValue);
|
|
});
|
|
});
|