openmedialibrary/static/js/transfersDialog.js

135 lines
4.1 KiB
JavaScript

'use strict';
oml.ui.transfersDialog = function() {
var ui = oml.user.ui,
$list = Ox.TableList({
columns: [
'id', 'title', 'extension', 'size',
'transferadded', 'transferprogress'
].map(function(id) {
var key = Ox.getObjectById(oml.config.itemKeys, id);
return {
align: Ox.contains([
'size', 'transferprogress'
], id) ? 'right' : 'left',
format: key.format,
id: id,
operator: oml.getSortOperator(id),
title: Ox._(key.title),
visible: id != 'id',
width: id == 'title' ? 240
: id == 'transferadded' ? 144
: id == 'transferprogress' ? 80 - Ox.UI.SCROLLBAR_SIZE
: key.columnWidth
};
}),
columnsVisible: true,
items: function(data, callback) {
Ox.Request.clearCache('find'); // FIXME: not ideal - and doesn't work
oml.api.find(Ox.extend(data, {
query: {
conditions: [{
key: 'mediastate',
operator: '==',
value: 'transferring'
}],
operator: '&'
}
}), callback);
},
keys: ['author'],
scrollbarVisible: true,
sort: [{key: 'transferadded', operator: '-'}],
unique: 'id'
}),
$statusbar = Ox.Bar({size: 16}),
$panel = Ox.SplitPanel({
elements: [
{element: $list},
{element: $statusbar, size: 16}
],
orientation: 'vertical'
}),
$item = Ox.Element(),
$cancelButton = Ox.Button({
title: 'Cancel Transfer...',
width: 128
})
.css({
margin: '8px'
})
.bindEvent({
click: function() {
var ids = $list.options('selected');
ids && ids.length && oml.api.cancelDownloads({
ids: ids
}, function() {
$list.reloadList(true);
});
}
})
.appendTo($item),
$content = Ox.SplitPanel({
elements: [
{element: $panel},
{element: $item, size: 160}
],
orientation: 'horizontal'
}),
that = Ox.Dialog({
buttons: [
Ox.Button({
id: 'preferences',
title: Ox._('Network Preferences...')
})
.bindEvent({
click: function() {
oml.UI.set({page: 'transfers'});
}
}),
{},
Ox.Button({
id: 'done',
title: Ox._('Done')
})
.bindEvent({
click: function() {
that.close();
}
})
],
closeButton: true,
content: $content,
height: 384,
title: Ox._('Transfers'),
width: 768
})
.bindEvent({
close: function() {
if (ui.page == 'transfers') {
oml.UI.set({page: ''});
}
}
});
oml.bindEvent({
transfer: Ox.throttle(function(data) {
var current = $list.value(data.id);
if (!Ox.isEmpty(current) && current.transferprogress != data.progress) {
$list.value(data.id, 'transferprogress', data.progress);
}
}, 1000)
});
return that;
};